package com.sg.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.sg.common.annotations.LikeFlag;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.util.Date;

/**
 * 用于财务主体的账户，部门预算中，要扣除项目中人力固定成本预算
 *
 * @author xxx
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("ccea7202a2c54c2d9cac3c1749056097")
public class OmsAccount extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 账户ID
     */
    @TableId(value = "account_id", type = IdType.UUID)
    @NotNull(message = "accountId不能为空")
    private String accountId;

    /**
     * 账户关联主体分类类型 CONTENT_TYPE:内容分类 ORGANIZATIONAL_STRUCTURE_TYPE:组织架构分类
     */
    @TableField(value = "account_object_class")
    @NotNull(message = "账户关联主体分类类型不能为空")
    @ApiModelProperty("账户关联主体分类类型")
    private String accountObjectClass;

    /**
     * 上级账户归属主体标识
     */
    @TableField(value = "parent_account_content_code")
    @ApiModelProperty("上级账户归属主体标识")
    private String parentAccountContentCode;

    /**
     * 账户标识
     */
    @TableField(value = "account_code")
    @NotNull(message = "账户标识不能为空")
    @ApiModelProperty("账户标识")
    private String accountCode;

    /**
     * 账户卡号
     */
    @TableField(value = "account_card_number")
    @ApiModelProperty("账户卡号")
    private String accountCardNumber;

    /**
     * 关联归属主体类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标 DEPT:部门
     */
    @TableField(value = "account_object_type_code")
    @ApiModelProperty("关联归属主体类型编码")
    private String accountObjectTypeCode;

    /**
     * 累计收入金额
     */
    @TableField(value = "total_budget_amount")
    @NotNull(message = "总金额不能为空")
    @ApiModelProperty("累计收入金额")
    private Double totalBudgetAmount;

    /**
     * 关联归属主体ID
     */
    @TableField(value = "account_object_id")
    @ApiModelProperty("关联归属主体ID")
    private String accountObjectId;

    /**
     * 账户余额
     */
    @TableField(value = "account_actual_balance")
    @NotNull(message = "账户余额不能为空")
    @ApiModelProperty("账户余额")
    private Double accountActualBalance;

    /**
     * 关联归属主体标识
     */
    @TableField(value = "account_content_code")
    @NotNull(message = "关联归属主体标识不能为空")
    @ApiModelProperty("关联归属主体标识")
    @LikeFlag(likeType = "RIGHT_LIKE")
    private String accountContentCode;

    /**
     * 可用金额
     */
    @TableField(value = "settlable_balance")
    @NotNull(message = "可用金额不能为空")
    @ApiModelProperty("可用金额")
    private Double settlableBalance;

    /**
     * 主题内容类型编码 ORG_OR_DEPT:组织或部门 INTELLIGENT_HARDWARE_EQUIPMENT:智能硬件设备 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表 OMS_MESSAGE_CHANNEL:通道表 OMS_ORG_ORGANIZATION:组织表 OMS_PROJECT:项目表 OMS_ORG_DEPT:部门表 OMS_QUESTION:问题表 OMS_OFFICIAL_DOCUMENT:公文表 OMS_VIRTUAL_ORG:虚拟组织表 OMS_MESSAGE:消息表 OMS_MESSAGE_LOCATION:消息位置表 OMS_MESSAGE_MEMBER:成员接收消息表 OMS_MESSAGE_MEMBER_CHANNEL_RELATION:成员通道关系表 OMS_FRAMEWORK_SPACE_MEMBER:成员表
     */
    @TableField(value = "theme_content_type_code")
    @ApiModelProperty("主题内容类型编码")
    private String themeContentTypeCode;

    /**
     * 冻结金额
     */
    @TableField(value = "un_settlable_balance")
    @NotNull(message = "冻结金额不能为空")
    @ApiModelProperty("冻结金额")
    private Double unSettlableBalance;

    /**
     * 主题内容ID
     */
    @TableField(value = "theme_content_id")
    @ApiModelProperty("主题内容ID")
    private String themeContentId;

    /**
     * 累计支出金额
     */
    @TableField(value = "accrued_settled_amount")
    @NotNull(message = "累计支出金额不能为空")
    @ApiModelProperty("累计结算金额")
    private Double accruedSettledAmount;

    /**
     * 账户状态 LOCK:锁定 NORMAL:正常
     */
    @TableField(value = "account_status")
    @NotNull(message = "账户状态不能为空")
    @ApiModelProperty("账户状态")
    private String accountStatus;

    /**
     * 是否结束状态 TRUE:是 FALSE:否
     */
    @TableField(value = "is_end_status")
    @NotNull(message = "是否结束状态不能为空")
    @ApiModelProperty("是否结束状态")
    private String isEndStatus;

    /**
     * 认证状态 UNCERTIFICATED:未认证 AUTHENTICATED:已认证 AUTHENTICATION_FAILURE:认证失败
     */
    @TableField(value = "certification_status")
    @NotNull(message = "认证状态不能为空")
    @ApiModelProperty("认证状态")
    private String certificationStatus;

    /**
     * 账户类型 POOL_ACCOUNT:发行账户 ECOLOGICAL_ACCOUNT:生态账户
     */
    @TableField(value = "account_type_code")
    @NotNull(message = "账户类型不能为空")
    @ApiModelProperty("账户类型")
    private String accountTypeCode;

    /**
     * 生态账户类型编码 ORG_POOL_ACCOUNT:组织发行账户 TARGET_CONTENT_ACCOUNT:目标内容账户
     */
    @TableField(value = "ecological_account_type_code")
    @NotNull(message = "生态账户类型编码不能为空")
    @ApiModelProperty("生态账户类型编码")
    private String ecologicalAccountTypeCode;

    /**
     * 是否预算账户 TRUE:是 FALSE:否
     */
    @TableField(value = "is_budget_account")
    @NotNull(message = "是否预算账户不能为空")
    @ApiModelProperty("是否预算账户")
    private String isBudgetAccount;

    /**
     * 是否到账账户 TRUE:是 FALSE:否
     */
    @TableField(value = "is_incoming_account")
    @ApiModelProperty("是否到账账户")
    private String isIncomingAccount;

    /**
     * 是否统计账户 TRUE:是 FALSE:否
     */
    @TableField(value = "is_statistical_account")
    @ApiModelProperty("是否统计账户")
    private String isStatisticalAccount;

    /**
     * 发行体系类型编码 CAPITAL_SYSTEM:资金体系 INTEGRAL_SYSTEM:积分体系
     */
    @TableField(value = "distribution_system_type_code")
    @NotNull(message = "发行体系类型编码不能为空")
    @ApiModelProperty("发行体系类型编码")
    private String distributionSystemTypeCode;

    /**
     * 是否组织正式财务标准 TRUE:是 FALSE:否
     */
    @TableField(value = "is_org_official_account_nom")
    @NotNull(message = "是否组织正式财务标准不能为空")
    @ApiModelProperty("是否组织正式财务标准")
    private String isOrgOfficialAccountNom;

    /**
     * 关联发行账户ID
     */
    @TableField(value = "distribution_account_id")
    @ApiModelProperty("关联发行账户ID")
    private String distributionAccountId;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @TableField(value = "subject_life_cycle")
    @NotNull(message = "主体生命周期不能为空")
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;

    /**
     * 项目关联加减的组织部门主体标识
     */
    @TableField(value = "rel_plus_sub_account_code")
    @ApiModelProperty("项目关联加减的组织部门主体标识")
    private String relPlusSubAccountCode;

    /**
     * 是否存档 TRUE:是 FALSE:否
     */
    @TableField(value = "is_archive")
    @NotNull(message = "是否存档不能为空")
    @ApiModelProperty("是否存档")
    private String isArchive;

    /**
     * 关联扣减预算账户归属主体标识
     */
    @TableField(value = "rel_sub_budget_account_code")
    @ApiModelProperty("关联扣减预算账户归属主体标识")
    private String relSubBudgetAccountCode;

    /**
     * 操作人就职记录ID
     */
    @TableField(value = "operation_induction_id")
    @NotNull(message = "操作人就职记录ID不能为空")
    @ApiModelProperty("操作人就职记录ID")
    private String operationInductionId;

    /**
     * 创建人就职记录ID
     */
    @TableField(value = "create_induction_id")
    @NotNull(message = "创建人就职记录ID不能为空")
    @ApiModelProperty("创建人就职记录ID")
    private String createInductionId;

    /**
     * 发布人就职记录ID
     */
    @TableField(value = "release_induction_id")
    @ApiModelProperty("发布人就职记录ID")
    private String releaseInductionId;

    /**
     * 存档人就职记录ID
     */
    @TableField(value = "archive_induction_id")
    @ApiModelProperty("存档人就职记录ID")
    private String archiveInductionId;

    /**
     * 操作时间
     */
    @TableField(value = "operate_time")
    @NotNull(message = "操作时间不能为空")
    @ApiModelProperty("操作时间")
    private Date operateTime;

    /**
     * 创建时间
     */
    @TableField(value = "create_time")
    @NotNull(message = "创建时间不能为空")
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 发布时间
     */
    @TableField(value = "release_time")
    @ApiModelProperty("发布时间")
    private Date releaseTime;

    /**
     * 存档时间
     */
    @TableField(value = "archive_time")
    @ApiModelProperty("存档时间")
    private Date archiveTime;

    /**
     * 是否作废 TRUE:是 FALSE:否
     */
    @TableField(value = "is_valid")
    @NotNull(message = "是否作废不能为空")
    @ApiModelProperty("是否作废")
    private String isValid;

    /**
     * 创建于空间ID
     */
    @TableField(value = "space_id")
    @NotNull(message = "创建于空间ID不能为空")
    @ApiModelProperty("创建于空间ID")
    private String spaceId;

    /**
     * 创建于联盟应用ID
     */
    @TableField(value = "app_id")
    @NotNull(message = "创建于联盟应用ID不能为空")
    @ApiModelProperty("创建于联盟应用ID")
    private String appId;
}
